<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
namespace Home\Controller;

use User\Api\UserApi;

/**
 * 用户控制器
 * 包括用户中心，用户登录及注册
 */
class UserController extends HomeController {
    
    /* 用户中心首页 */
    public function index() {
    }
    
    /* 注册页面 */
    public function register($username = '', $password = '', $repassword = '', $email = '', $verify = '') {
        if (! C ( 'USER_ALLOW_REGISTER' )) {
            $this->error ( '注册已关闭' );
        }
        if (IS_POST) { // 注册用户
            /* 检测验证码 */
            if (! check_verify ( $verify )) {
                $this->error ( '验证码输入错误！' );
            }
            
            /* 检测密码 */
            if ($password != $repassword) {
                $this->error ( '密码和重复密码不一致！' );
            }
            
            /* 调用注册接口注册用户 */
            $User = new UserApi ();
            $uid = $User->register ( $username, $password, $email );
            if (0 < $uid) { // 注册成功
                            // TODO: 发送验证邮件
                            
                // 关联默认可管理的公众号
                $public = C ( 'DEFAULT_PUBLIC' );
                $publicArr = array_filter ( explode ( ',', $public ) );
                foreach ( $publicArr as $p ) {
                    $data ['uid'] = $uid;
                    $data ['mp_id'] = $p;
                    M ( 'member_public_link' )->add ( $data );
                }
                
                $this->success ( '注册成功，请登录', U ( 'login' ) );
            } else { // 注册失败，显示错误信息
                $this->error ( $this->showRegError ( $uid ) );
            }
        } else { // 显示注册表单
            $this->display ();
        }
    }
    
    /* 登录页面 */
    public function login($username = '', $password = '', $verify = '') {
        if (IS_POST) { // 登录验证
            /* 检测验证码 */
            if (C ( 'WEB_SITE_VERIFY' ) && ! check_verify ( $verify )) {
                //ALEX[[[
                // $this->error ( '验证码输入错误！' );
                //]]]ALEX
            }
            /* 调用UC登录接口登录 */
            $user = new UserApi ();
            $uid = $user->login ( $username, $password );
            if (0 < $uid) { // UC登录成功
                /* 登录用户 */
                $Member = D ( 'Member' );
                if ($Member->login ( $uid )) { // 登录用户
                    $url = Cookie ( '__forward__' );
                    if ($url) {
                        Cookie ( '__forward__', null );
                    } else {
                    //	$url = U ( 'Home/Index/main' );
                        $url = addons_url('UserAnalysis://UserAnalysis/lists');
                    }
                    
                    session ( 'is_follow_login', null );
                    
                    $this->success ( '登录成功！', $url );
                } else {
                    $this->error ( $Member->getError () );
                }
            } else { // 登录失败
                switch ($uid) {
                    case - 1 :
                        $error = '用户不存在或被禁用！';
                        break; // 系统级别禁用
                    case - 2 :
                        $error = '密码错误！';
                        break;
                    default :
                        $error = '未知错误！';
                        break; // 0-接口参数错误（调试阶段使用）
                }
                $this->error ( $error );
            }
        } else { // 显示登录表单
            $html = 'login';
            $_GET ['from'] == 'store' && $html = 'simple_login';
            
            $this->display ( $html );
        }
    }
    
    /* 退出登录 */
    public function logout() {
        if (is_login ()) {
            D ( 'Member' )->logout ();
            $this->success ( '退出成功！', U ( 'User/login' ) );
        } else {
            $this->redirect ( 'User/login' );
        }
    }
    
    /* 验证码，用于登录和注册 */
    public function verify() {
        $verify = new \Think\Verify ();
        $verify->entry ( 1 );
    }
    
    /**
     * 获取用户注册错误信息
     *
     * @param integer $code
     *        	错误编码
     * @return string 错误信息
     */
    public function showRegError($code = 0) {
        switch ($code) {
            case - 1 :
                $error = '用户名长度必须在16个字符以内！';
                break;
            case - 2 :
                $error = '用户名被禁止注册！';
                break;
            case - 3 :
                $error = '用户名被占用！';
                break;
            case - 4 :
                $error = '密码长度必须在6-30个字符之间！';
                break;
            case - 5 :
                $error = '邮箱格式不正确！';
                break;
            case - 6 :
                $error = '邮箱长度必须在1-32个字符之间！';
                break;
            case - 7 :
                $error = '邮箱被禁止注册！';
                break;
            case - 8 :
                $error = '邮箱被占用！';
                break;
            case - 9 :
                $error = '手机格式不正确！';
                break;
            case - 10 :
                $error = '手机被禁止注册！';
                break;
            case - 11 :
                $error = '手机号被占用！';
                break;
            default :
                $error = '未知错误';
        }
        return $error;
    }
    
    /**
     * 修改密码提交
     *
     * @author huajie <banhuajie@163.com>
     */
    public function profile() {
        if (! is_login ()) {
            $this->error ( '您还没有登录', U ( 'User/login' ) );
        }
        if (IS_POST) {
            // 获取参数
            $uid = is_login ();
            $password = I ( 'post.old' );
            $repassword = I ( 'post.repassword' );
            $data ['password'] = I ( 'post.password' );
            empty ( $password ) && $this->error ( '请输入原密码' );
            empty ( $data ['password'] ) && $this->error ( '请输入新密码' );
            empty ( $repassword ) && $this->error ( '请输入确认密码' );
            
            if ($data ['password'] !== $repassword) {
                $this->error ( '您输入的新密码与确认密码不一致' );
            }
            
            $Api = new UserApi ();
            $res = $Api->updateInfo ( $uid, $password, $data );
            if ($res ['status']) {
                $this->success ( '修改密码成功！' );
            } else {
                $this->error ( $res ['info'] );
            }
        } else {
            $this->display ();
        }
    }
}
